const cluster = require('cluster');

console.log('cluster.isMaster:',cluster.isMaster); //是否是根，老大

//根据cpu的核数 几核创建几个进程
if (cluster.isMaster /*子进程就是isWorker*/) { //只会走一次这里
  // 在主分支中可以 创建子进程
  let worker = cluster.fork(); //创建一个子进程
  cluster.fork(); //再创建一个子进程
  console.log('父进程')
} else { //会走两次这里
  console.log('子进程');
  process.exit(); //这里这个process此时为子进程自己
  // process.disconnect();
}

//下面的代码每次都会执行
//但因为默认是pipe 而不是inherit 故这里只能看到一次
console.log('~~~~~~~~~~~~~~~~~~~~');

//cluster里有几个监听函数

//fork一次就会调一下回调
cluster.on('fork', worker => { //先于上面的判断里的 console.log('子进程')执行
  console.log('worker.id:',worker.id);
});

cluster.on('exit', () => { //会在上面的 console.log('子进程') 打印之后执行
  console.log('exit');
});

cluster.on('disconnect', () => {
  console.log('disconnect'); //exit会直接就死了 disconnect的话当前连接仍然有效 再有请求过来的话就不再接受了 所有连接失去后 就会关闭
});


/*
cluster.on('online', function () {
  console.log('online 子进行已经启动成功了');
});

cluster.on('listening', function () {
  console.log('listening 子进程的服务器已经启动成功了，可以开始监听客户端请求了');
});*/
